package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import modelo.ModeloIngrediente;
import modelo.ModeloOrden;
import modelo.ModeloOrdenDAO;
import modelo.ModeloProducto;
import modelo.ModeloProductoDAO;

import vista.VistaOrden;


public class ControladorOrden implements ActionListener{
	private VistaOrden vista;
	private ModeloOrdenDAO modelo;
	private Vector<ModeloProducto> productos;
	
	public static void main(String[] args) {
		new ControladorOrden();
	}
    
	public ControladorOrden() {
		this.vista = new VistaOrden();
		this.vista.setVisible(true);
		vista.addlistener(this);
		this.modelo = new ModeloOrdenDAO();
		cargarTabla();
	}
	
	private void cargarTabla() {
		DefaultTableModel m =(DefaultTableModel) vista.getTblIngrediente().getModel();	
		m.setRowCount(0);
		productos = new ModeloProductoDAO().listar();
		Vector f;
		for (ModeloProducto modelo: productos) {
			f = new Vector();
			f.add(modelo.getDescripcion());
			m.addRow(f);
		}
		
	}
	

	@Override
	public void actionPerformed(ActionEvent evt) {
		if(evt.getActionCommand().equals("Cancelar")){
			vista.limpiarCancelar();
		}
		else if(evt.getActionCommand().equals("Registrar")){
			if(!vista.getcodigo().isEmpty() && !vista.getnombre().isEmpty() && !vista.getcedula().isEmpty())
				if(vista.getModeloAgregados().getRowCount()>0){
					ModeloOrden m = new ModeloOrden();
					m.setCodigo (vista.getcodigo());
					m.setCedula(vista.getcedula());
					m.setNombre(vista.getnombre());
					m.setStatus("A");
					m.setTotal((Double.parseDouble(vista.getTotal())));
					if(modelo.registar(m)){
						Vector<String> v = new Vector<String>();
						Vector<Integer> c = new Vector<Integer>();
						DefaultTableModel model = vista.getModeloAgregados();
						int i =0;
						while(i<model.getRowCount()){
							ModeloProducto p = buscarProducto(((String)model.getValueAt(i, 0)));
							int can = (Integer)model.getValueAt(i, 1);
							v.add(p.getCodigo());							
							c.add(can);
							int k = 0;
							while(k<can){
								new ModeloProductoDAO().actualizarStockIngredientes(p);
								k++;
							}
							i++;
						}		
						modelo.registarProductos(m, v, c);
						vista.limpiarCancelar();
						vista.mostrarMensaje("Orden registrada exitosamente");					
					}
					else
						vista.mostrarMensaje("Codigo registrado");
				}
				else
					vista.mostrarMensaje("No ha registrado productos");
			else
				vista.mostrarMensaje("Campos vacios");
		}
		else if(evt.getActionCommand().equals("Agregar")){
			int i =  vista.getTblIngrediente().getSelectedRow();
			if(i!=-1){
				String des = (String)vista.getTblIngrediente().getValueAt(i, 0);
				ModeloProducto m = buscarProducto(des); 
				ModeloProductoDAO dao = new ModeloProductoDAO();
				if(dao.revisarStockIngredientes(m, vista.getCantidad())){
						vista.agregar(m);
				}
				else
					vista.mostrarMensaje("No tenemos stock para cubrir su orden");
				
			}
			else
				vista.mostrarMensaje("Selecionar un producto");
			
		}
		else if(evt.getActionCommand().equals("Quitar")){
			vista.quitar();
		
		}
		else if(evt.getActionCommand().equals("Salir")){
			vista.setVisible(false);
		
		}
		
		
	}
	
	public ModeloProducto buscarProducto(String descripicion){
        for (int i = 0; i < productos.size(); i++)
            if(productos.elementAt(i).getDescripcion().equals(descripicion))
                return productos.elementAt(i);
        return null;
     }
	

}

